昨天寫完code之後跑,發現如果測試個案是[9,9],輸出會有問題,變成[0,1]
12點前沒想到為什麼,所以今天繼續這題,找出程式碼錯誤的原因
昨天完成的程式碼如下
def plusOne(self, digits: List[int]) -> List[int]:
digits[len(digits)-1] = digits[len(digits)-1] + 1
i = 1
while digits[len(digits)-i] > 9:
if i > len(digits):
digits.insert(0, 1)
digits[len(digits)-i] = digits[len(digits)-i] - 10
digits[len(digits)-(i+1)] = digits[len(digits)-(i+1)] + 1
i = i + 1
return digits
查了python3的語法list.insert要新增一個元素在index[0]的用法是正確的,
所以就加了print來除錯,意外的print在leetcode也可以跑的(原本以為不行)
就找到要進位的這個地方有問題,修改成下面這樣:
def plusOne(self, digits: List[int]) -> List[int]:
digits[len(digits)-1] = digits[len(digits)-1] + 1
i = 1
while digits[len(digits)-i] > 9:
digits[len(digits)-i] = digits[len(digits)-i] - 10
i = i + 1
if i > len(digits):
digits.insert(0, 1)
break
else:
digits[len(digits)-i] = digits[len(digits)-i] + 1
return digits
加上print來查程式碼運行的紀錄,發現第一版的程式在判斷的順序上有問題,
做[9,9]測試個案的時候,跑到i=2,第二行進位會變成digits[-1]=digits[len(digits)-1]=最尾位數
進位新增的地方也會跑不到
因此修改成第二種程式寫法之後,做輸入[9,9]的測試,輸出就會變成是[1,0,0]了
附上Submit後的結果: